package GUI.Visualizacion;

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.util.*;
//import lp2.juego.simulacion.base.*;
//import lp2.juego.simulacion.produccion.Produccion;
import BL.BLAlmacen;
import BL.BLRack;
import BE.BERack;
import BE.BENodo;
import java.util.List;


public class Escenario extends JPanel{
    final static int ANCHO_IMAGEN=24;
    final static int ALTO_IMAGEN=24;
    static int LARGO_ALMACEN;
    static int ANCHO_ALMACEN;
    BLAlmacen blAlmacen = new BLAlmacen();
    BLRack blRack = new BLRack();  
    boolean hayRuta = false;
    List<BENodo> rutaSolucion = null;
    ArrayList<BERack> lstRack;


    private Hashtable<Character, BufferedImage> mapaImagenes=new Hashtable<Character,BufferedImage>();
//    Ciudad ciudad;
    private int dx;
    private int dy;
    private int tiempo;

    Escenario(/*Ciudad ciudad*/List<BENodo> ruta){
//        this.ciudad=ciudad;
        dx=0; dy=0; 
        LARGO_ALMACEN = blAlmacen.getLargo();
        ANCHO_ALMACEN = blAlmacen.getAncho();
        blRack.cargar();
        lstRack=blRack.getLstRacks();
        //terrenos
        mapaImagenes.put(' ', cargaImagen("Imagenes\\agua2.JPG"));
//        mapaImagenes.put('+', cargaImagen("Imagenes\\grass.jpg"));
        mapaImagenes.put('-', cargaImagen("Imagenes\\roca2.JPG"));
        //entretenimiento
//        mapaImagenes.put('E', cargaImagen("Imagenes\\eltizonbar.jpg"));
//        mapaImagenes.put('C', cargaImagen("Imagenes\\cine4d.jpg"));
        //productoras
//        mapaImagenes.put('F', cargaImagen("Imagenes\\clothesfactory.jpg"));
//        mapaImagenes.put('G', cargaImagen("Imagenes\\cocaloca.jpg"));
//        mapaImagenes.put('Z', cargaImagen("Imagenes\\teletransportador.jpg"));
        //vivienda
//        mapaImagenes.put('H', cargaImagen("Imagenes\\house.jpg"));
//        mapaImagenes.put('N', cargaImagen("Imagenes\\apartment.jpg"));
        //comunicaciones
        mapaImagenes.put('w', cargaImagen("Imagenes\\way2.jpg"));

//        mapaImagenes.put('1',cargaImagen("Imagenes\\construccion1x1.jpg"));
//        mapaImagenes.put('2',cargaImagen("Imagenes\\construccion1x2.jpg"));
//        mapaImagenes.put('3',cargaImagen("Imagenes\\construccion2x1.jpg"));
//        mapaImagenes.put('4',cargaImagen("Imagenes\\construccion2x2.jpg"));
//        mapaImagenes.put('5',cargaImagen("Imagenes\\construccion4x4.jpg"));
//        
//        
//        mapaImagenes.put('6',cargaImagen("Imagenes\\produciendo1.jpg"));
//        mapaImagenes.put('7',cargaImagen("Imagenes\\produciendo2.jpg"));
        if (ruta!=null){
            hayRuta=true;
            rutaSolucion=ruta;
        }            
    }

    private BufferedImage cargaImagen(String nombre) {
        BufferedImage image=null;
        try{
            FileInputStream Entrada = new FileInputStream(nombre);
            JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(Entrada);
            image = decoder.decodeAsBufferedImage();
            Entrada.close();
        }
        catch(FileNotFoundException FNFExc){
            JOptionPane.showMessageDialog(this, "Archivo "+nombre+" No Encontrado");
        }
        catch(IOException IOExc){
        }
        if (image==null)
            return null;
        else
            return image;
    }
    
//    public void setCiudad(Ciudad ciudad) {
//        this.ciudad = ciudad;
//    }

    public int getTiempo() {
        return tiempo;
    }

    public void setTiempo(int tiempo) {
        this.tiempo = tiempo;
    }



    public @Override void paintComponent(Graphics g){

        super.paintComponent(g);
        for (int j=0; j<LARGO_ALMACEN; j++)
            for (int k=0; k<ANCHO_ALMACEN; k++)
                g.drawImage(mapaImagenes.get('w'), ANCHO_IMAGEN*k-dx, ALTO_IMAGEN*j-dy, null);
//        System.out.println("Largo: "+LARGO_ALMACEN+". Ancho: "+ANCHO_ALMACEN);
//        System.out.println("Racks: "+blRack.getLstRacks().size());
        for (BERack beRack:lstRack){
//            if (construccion.getTipoConstruccion()==Construccion.tipoConstruccion.produccion && ((Produccion)construccion).getContrato()!=null)
//            {
//                char c;
//                
//                if (ciudad.getTiempo() % 2==0) c='6';
//                else c='7';
//                    
//                    for (int z=0;z<construccion.getAncho();z++){
//                        g.drawImage(mapaImagenes.get(c), ANCHO_IMAGEN*(construccion.getPosX()+z)-dx, ALTO_IMAGEN*(construccion.getPosY())-dy, null);
//                    }
//                    for (int z=0;z<construccion.getAlto();z++){
//                        g.drawImage(mapaImagenes.get(c), ANCHO_IMAGEN*(construccion.getPosX())-dx, ALTO_IMAGEN*(construccion.getPosY()+z)-dy, null);
//                    }
//                }//            
//            else {
//            if (construccion.getConstruido())
                g.drawImage(mapaImagenes.get('-'), ANCHO_IMAGEN*(beRack.getPosicion().getFila()-1)-dx, ALTO_IMAGEN*(beRack.getPosicion().getColumna()-1)-dy, null);
                for (int i=0; i<beRack.getNumeroColumnas(); i++)
                    g.drawImage(mapaImagenes.get('-'), ANCHO_IMAGEN*(beRack.getPosicion().getFila()-1)-dx, ALTO_IMAGEN*(beRack.getPosicion().getColumna()+i-1)-dy,null);
                //System.out.println("Rack: "+beRack.getIdRack()+" - "+"x:"+beRack.getPosicion().getFila()+" - y:"+beRack.getPosicion().getColumna());
//            else{
//                if (construccion.getAncho()==1 && construccion.getAlto()==1)
//                    g.drawImage(mapaImagenes.get('1'), ANCHO_IMAGEN*construccion.getPosX()-dx, ALTO_IMAGEN*construccion.getPosY()-dy, null);
//                if (construccion.getAncho()==1 && construccion.getAlto()==2)
//                    g.drawImage(mapaImagenes.get('2'), ANCHO_IMAGEN*construccion.getPosX()-dx, ALTO_IMAGEN*construccion.getPosY()-dy, null);
//                if (construccion.getAncho()==2 && construccion.getAlto()==1)
//                    g.drawImage(mapaImagenes.get('3'), ANCHO_IMAGEN*construccion.getPosX()-dx, ALTO_IMAGEN*construccion.getPosY()-dy, null);
//                if (construccion.getAncho()==2 && construccion.getAlto()==2)
//                    g.drawImage(mapaImagenes.get('4'), ANCHO_IMAGEN*construccion.getPosX()-dx, ALTO_IMAGEN*construccion.getPosY()-dy, null);
//                if (construccion.getAncho()==4 && construccion.getAlto()==4)
//                    g.drawImage(mapaImagenes.get('5'), ANCHO_IMAGEN*construccion.getPosX()-dx, ALTO_IMAGEN*construccion.getPosY()-dy, null);
//            }


//            }
        }
        if (hayRuta){
            for (BENodo beNodo:rutaSolucion){
                g.drawImage(mapaImagenes.get(' '), ANCHO_IMAGEN*(beNodo.getX()-1)-dx, ALTO_IMAGEN*(beNodo.getY()-1)-dy, null);
            }
        }
    }

    public int getDx() {
        return dx;
    }

    public void setDx(int dx) {
        this.dx = dx;
    }

    public int getDy() {
        return dy;
    }

    public void setDy(int dy) {
        this.dy = dy;
    }
}
